package q7_gc_test;

import java.util.concurrent.TimeUnit;

/*
JVM内存结构
    类装载子系统
    方法区
    堆
    java栈
    本地方法栈
    程序计数器

GC作用域
    方法区和堆

常见的垃圾回收算法
    引用计数
    复制
    标记清除
    标记整理

什么是GC roots
    为了解决引用计数法的循环引用问题，Java使用了可达性分析的方法。
    所谓“GC roots”或者说tracing GC的“根集合”，就是一组必须活跃的引用。
    基本思路是通过一系列名为“GC roots”的对象作为起始点，从这个被称为“GC roots”的对象开始向下搜索，
    如果一个对象到“GC roots”没有任何引用链相连时，则说明此对象不可用。
    也即给定一个集合的引用作为根出发，通过引用关系遍历对象图，能被遍历的（可到达的）对象就被判定为存活；
    没有被遍历到的自然被判定为死亡。

可以作为GC roots的对象：
    虚拟机栈（栈帧中的局部变量区，也叫做局部变量表）中引用的对象。
    方法区中的类静态属性引用的对象。
    方法区中常量引用的对象
    本地方法栈中JNI（Native方法）引用的对象
*/
public class GCRootDemo {

    private byte[] byteArray = new byte[100*1024*1024];

//    private static GCRootDemo2 t2 = new GCRootDemo2();
//    private static final GCRootDemo3 t3 = new GCRootDemo3(8);

    public static  void m1(){
        GCRootDemo t1 = new GCRootDemo();
        System.gc();
        System.out.println("第一次GC完成");
    }

    public static void main(String[] args) {
        m1();
    }
}

